<?php
/**
 * Created by PhpStorm.
 * Author: ljz
 * Date: 2023/5/08
 * Time: 9:39
 */

namespace App\store\models;


use App\common\models\BaseModel;
use Illuminate\Support\Facades\DB;

/**
 * Class OrderModel
 * @package app\common\models
 */
class OrderModel extends BaseModel
{
    const table = 'order';

    public function __construct() {

    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function rules()
    {
        return [
            // 'order_sn' => 'required', // 订单编号
            'store_id' => 'required|int', // 商户ID
            'status' => 'required|int', // 订单状态：必填, 0 全部, 1 待付款, 2 待发货, 3 待收货, 4 已完成, 5 已关闭
            'order_type' => 'int', // 订单类型：可选参数, 1 普通订单, 2 积分抽奖, 3 优惠券订单
            'time_type' => 'int', // 查询时间类型：可选参数, 1 下单时间, 2 支付时间, 3 发货时间, 4 完成时间
            'start_time' => 'string', // 查询开始时间: 可选参数
            'end_time' => 'string', // 查询结束时间: 可选参数
            'goods_type' => 'int', // 商品类型: 可选参数, 1 实体商品, 2 虚拟商品, 3 电子卡密
            'goods_name' => 'string', // 商品标题：可选参数
            'dispatch_type_id' => 'int', // 配送类型： 可选参数, 1 自提, 2 快递
            'refund_id' => 'int', // 售后类型: 可选参数, 1 未售后, 2 售后中, 3 售后完成
            'pay_type' => 'int', // 支付方式：可选参数, 1 余额支付, 2 佣金支付, 3 微信支付, 4 后台确认, 5 积分+余额, 6 积分+零钱, 7 积分+微信
            'order_source' => 'int', // 订单来源：可选参数, 1 微信小程序, 2 h5
        ];
    }

    /**
     * 更新字段规则
     *
     * @return array
     */
    static public function detail_rules()
    {
        return [
            'store_id' => 'required|int', // 商户ID
            'order_id' => 'required|int', // 订单编号
        ];
    }

    /**
     * 字段验证返回错误信息
     *
     * @return array
     */
    static public function message()
    {
        return [
            // 'order_sn.required' => '订单编号不能为空',
            'order_id.required' => '订单ID不能为空',
            'order_id.int' => '订单ID数据类型错误',
            'store_id.required' => '商户ID不能为空',
            'store_id.int' => '商户ID数据类型错误',
            'status.required' => '订单状态不能为空',
            'status.int' => '订单状态数据类型错误',
            'order_type.int' => '订单类型数据类型错误',
            'time_type.int' => '查询时间类型数据类型错误',
            'start_time.string' => '查询开始时间数据类型错误',
            'end_time.string' => '查询结束时间数据类型错误',
            'goods_type.int' => '商品类型数据类型错误',
            'goods_name.string' => '商品标题数据类型错误',
            'dispatch_type_id.int' => '配送类型数据类型错误',
            'refund_id.int' => '售后类型数据类型错误',
            'pay_type.int' => '支付方式数据类型错误',
            'order_source.int' => '订单来源数据类型错误',
        ];
    }

    /**
     * 数据库 - 查询子订单 ID列表
     *
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function sonOrderIdListed($where_data = [])
    {
        $data = DB::table('order_son')
            ->select( 'order_id')
            ->where($where_data)
            ->get();

        return json_decode($data, true);
    }

    /**
     * 数据库 - 查询子订单列表
     *
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function sonListed($where_data = [])
    {
        $data = DB::table('order_son')
            ->select( 'thumb_url', 'title', 'price', 'num')
            ->where($where_data)
            ->get();

        return json_decode($data, true);
    }

    /**
     * 数据库 - 查询订单列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $where_data array //查询条件 参数数组
     * @param $data array //参数数组
     * @return array
     */
    static public function listed($page, $limit, $where_data = [], $where_in_data = [], $data = [])
    {
        $data = DB::table(self::table)
            ->select(
                'id', 'order_sn', 'order_type', 'create_time',
                'status', 'uid', 'dispatch_type_id', 'goods_total', 'price',
            )
            ->where($where_data)
            ->whereIn('id', $where_in_data)
            ->offset($page)
            ->limit($limit)
            ->get();

        return json_decode($data, true);
    }

    /**
     * 数据库 - 查询订单详情
     *
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function detailsed($where_data)
    {
        $data = DB::table(self::table)
            ->select(
                'id', 'order_sn', 'order_type', 'create_time',
                'status', 'uid', 'dispatch_type_id', 'goods_total', 'price',
                'remark'
            )
            ->where($where_data)
            ->get();

        return json_decode($data, true);
    }

    /**
     * 数据库 - 更新数据
     * @param $store_id //店铺ID
     * @param $data //参数数组
     * @return array
     */
    static public function updatedData($store_id, $data)
    {
        $data = DB::table(self::table)
            ->where('id','=', $store_id)
            ->update($data);

        return $data;
    }

}
